
package eSchool.DataLayer;

import eSchool.BL.CriteriosPesquisa;
import eSchool.BL.Funcionario;
import eSchool.BL.Funcionarios;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class AccessFuncionarioDAO implements IFuncionarioDAO{
    
     private Connection connection = null;
    
    public AccessFuncionarioDAO()        
    {
    }

    public int insertFuncionario(Funcionario funcionario) throws Exception {
        Connection con = connection;
        int resultado = -1;

        if (con == null) {
            con = AccessDAOFactory.createConnection();
        }

        String sqlIns = "Insert into DocFunc ( idDocFunc, nomeDocFunc, moradaDocFunc, codPostalDocFunc, localidadeDocFunc, sexoDocFunc, emailDocFunc, telefoneDocFunc, obsDocFunc, utilizador, palavraChave, idTipoDocFunc)";
        sqlIns += " values (?,?,?,?,?,?,?,?,?,?,?,?)";
        PreparedStatement pst = con.prepareStatement(sqlIns);
        pst.setInt(1, funcionario.getIdFuncionario());
        pst.setString(2, funcionario.getNome());
        pst.setString(3, funcionario.getMorada());
        pst.setString(4, funcionario.getCodPostal());
        pst.setString(5, funcionario.getLocalidade());
        pst.setString(6, funcionario.getSexo());
        pst.setString(7, funcionario.getEmail());
        pst.setString(8, funcionario.getTelefone());
        pst.setString(9, funcionario.getObs());
        pst.setString(10, funcionario.getUtilizador());
        pst.setString(11, funcionario.getPassword());        
        pst.setInt(12, 2);   // O idTipoDocFunc é 1 para Docente e 2 para Funcionario      
        
        resultado = pst.executeUpdate();

        if (connection == null) {
            con.close();
            con = null;
        }

        return resultado;
    }

    public boolean deleteFuncionario(Funcionario funcionario) throws Exception {
        // Implement delete customer here
        // Return true on success, false on failure
        return true;
    }

    public boolean updateFuncionario(Funcionario funcionario) throws Exception {
        Connection con = connection;

        if (con == null) {
            con = AccessDAOFactory.createConnection();
        }

        String sqlUpd = " Update DocFunc SET  " +
                " nomeDocFunc = ?, " +
                " codPostalDocFunc = ?, " +
                " codPostalDocFunc = ?, " +
                " localidadeDocFunc = ?, " +
                " sexoDocFunc = ?, " +
                " sexoDocFunc = ?, " +
                " telefoneDocFunc = ?, " +
                " obsDocFunc = ?, " +
                " utilizador = ?, " +
                " palavraChave = ? " +
                " WHERE idDocFunc = ?";

        PreparedStatement pst = con.prepareStatement(sqlUpd);
        pst.setString(1, funcionario.getNome());
        pst.setString(2, funcionario.getMorada());
        pst.setString(3, funcionario.getCodPostal());
        pst.setString(4, funcionario.getLocalidade());
        pst.setString(5, funcionario.getSexo());
        pst.setString(6, funcionario.getEmail());
        pst.setString(7, funcionario.getTelefone());
        pst.setString(8, funcionario.getObs());     
        pst.setString(9, funcionario.getUtilizador());     
        pst.setString(10, funcionario.getPassword());     
        pst.setInt(11, funcionario.getIdFuncionario());        

        pst.executeUpdate();

        if (connection == null) {
            con.close();
            con = null;
        }

        return true;
    }

    public Funcionarios selectFuncionarioTO(CriteriosPesquisa criterio) throws Exception {

        Funcionarios funcionarios= new Funcionarios();
        
        return selectFuncionarioTO(funcionarios, criterio);

    }
    
    public Funcionarios selectFuncionarioTO(Funcionarios funcionarios, CriteriosPesquisa criterio) throws Exception {
        Connection con = connection;
        Funcionario funcionario = null;
     
        if (con == null) {
            con = AccessDAOFactory.createConnection();
        }

        String sqlSlct = " SELECT idDocFunc, nomeDocFunc, moradaDocFunc, codPostalDocFunc, localidadeDocFunc, sexoDocFunc, emailDocFunc, telefoneDocFunc, obsDocFunc,  utilizador, palavraChave, idTipoDocFunc " +
                                         " FROM DocFunc" +
                                         " WHERE idTipoDocFunc = 2";

        PreparedStatement pst = con.prepareStatement(sqlSlct);
        
        ResultSet rs = pst.executeQuery();
        
        while (rs.next()) {
            funcionario = new Funcionario();
            funcionario.setIdFuncionario(rs.getInt("idDocFunc"));
            funcionario.setNome(rs.getString("nomeDocFunc"));
            funcionario.setMorada(rs.getString("moradaDocFunc"));
            funcionario.setCodPostal(rs.getString("codPostalDocFunc"));
            funcionario.setLocalidade(rs.getString("localidadeDocFunc"));
            funcionario.setSexo(rs.getString("sexoDocFunc"));
            funcionario.setEmail(rs.getString("emailDocFunc"));
            funcionario.setTelefone(rs.getString("telefoneDocFunc"));            
            funcionario.setObs(rs.getString("obsDocFunc")); 
            funcionario.setUtilizador(rs.getString("utilizador"));
            funcionario.setPassword(rs.getString("palavraChave"));
            funcionarios.add(funcionario);
        }
        
        rs.close();
                
        if (connection == null) {
            con.close();
            con = null;
        }
        
        return funcionarios;
    }

    public Funcionario findFuncionario(int idFuncionario) throws Exception {
        
        Funcionario funcionario = null;
        
        return findFuncionario(funcionario, idFuncionario);
        
    }
    
    public Funcionario findFuncionario(Funcionario funcionario, int idFuncionario) throws Exception {
        Connection con = connection;
        
        if (con == null) {
            con = AccessDAOFactory.createConnection();
        }

        String sqlSlct = " SELECT idDocFunc, nomeDocFunc, moradaDocFunc, codPostalDocFunc, localidadeDocFunc, sexoDocFunc, emailDocFunc, telefoneDocFunc, obsDocFunc, utilizador, palavraChave, idTipoDocFunc " +
                " From DocFunc" +
                " WHERE idDocFunc = ?";

        PreparedStatement pst = con.prepareStatement(sqlSlct);
        pst.setInt(1, idFuncionario);

        ResultSet rs = pst.executeQuery();
        
         while (rs.next()) {
            funcionario = new Funcionario();
            funcionario.setIdFuncionario(rs.getInt("idDocFunc"));
            funcionario.setNome(rs.getString("nomeDocFunc"));
            funcionario.setMorada(rs.getString("moradaDocFunc"));
            funcionario.setCodPostal(rs.getString("codPostalDocFunc"));
            funcionario.setLocalidade(rs.getString("localidadeDocFunc"));           
            funcionario.setSexo(rs.getString("sexoDocFunc"));
            funcionario.setEmail(rs.getString("emailDocFunc"));
            funcionario.setTelefone(rs.getString("telefoneDocFunc"));
            funcionario.setObs(rs.getString("obsDocFunc")); 
            funcionario.setUtilizador(rs.getString("utilizador"));
            funcionario.setPassword(rs.getString("palavraChave"));
        }

        if (connection == null) {
            con.close();
            con = null;
        }
        
        return funcionario;
    }

}
